package com.tbit.uqbike.service.business;

import com.tbit.uqbike.enums.AdapayCashType;
import com.tbit.uqbike.object.pojo.SubAccount;
import com.tbit.uqbike.object.pojo.SubAccountBind;
import com.tbit.uqbike.object.pojo.dto.SubAccountDTO;
import com.tbit.uqbike.object.pojo.dto.SubAccountMerchantsDTO;
import com.tbit.uqbike.object.pojo.dto.SubAccountRatioDTO;
import com.tbit.uqbike.object.pojo.vo.*;
import com.tbit.uqbike.object.value.LoginInfo;
import com.tbit.common.entity.view.PageResult;
import com.tbit.common.entity.view.Result;

import java.util.List;

/**
 * 分账管理接口
 *
 * @Author:BUGTian
 * @DATE: 2022/5/23
 */
public interface SubAccountService {
    /**
     * 创建分账账户
     *
     * @param subAccountDTO
     * @return
     */
    Result createMember(SubAccountDTO subAccountDTO);

    /**
     * 修改分账账户名称
     *
     * @param subAccountId
     * @param nickName
     */
    void updateMember(Integer subAccountId, String nickName,String autoRemark);

    /**
     * 删除分账账户
     *
     * @param subAccountId
     * @return
     */
    Result deleteMember(Integer subAccountId);

    /**
     * 分页查询分账账户信息
     *
     * @param accountId
     * @param page
     * @param size
     * @param state
     * @param nickName
     * @param phone
     * @return
     */
    PageResult<SubAccount> queryPage(Integer accountId, Integer page, Integer size, Integer state, String nickName, String phone);

    /**
     * 分账账户绑定登录账户
     *
     * @param subAccountBind
     * @return
     */
    Result bandAccountUser(SubAccountBind subAccountBind);

    /**
     * 分账比例设置
     *
     * @param subAccountRatioDTO
     * @param loginInfo
     * @return
     */
    Result addSubAccountRatio(SubAccountRatioDTO subAccountRatioDTO, LoginInfo loginInfo);

    /**
     * 分账比例批量设置
     */
    Result<Void> batchAddMachineGroupRatio(List<SubAccountRatioDTO> dtoList, LoginInfo loginInfo);

    /**
     * 查询绑定用户列表
     *
     * @param subAccountId
     * @param page
     * @param size
     * @return
     */
    Result<PageResult<SubAccountBandUserVO>> queryBandAccountUser(Integer subAccountId, Integer page, Integer size);

    /**
     * 删除绑定关系
     *
     * @param subAccountId
     * @param accountUserId
     * @return
     */
    Result deleteBand(Integer subAccountId, Integer accountUserId);

    /**
     * 查询分账比例
     *
     * @param page
     * @param size
     * @param accountId
     * @param state
     * @param groupId
     * @return
     */
    PageResult<SubAccountRatioVO> querySubAccountRatio(Integer page, Integer size, Integer accountId, Integer state, String groupId, Integer type);

    /**
     * 取消未生效的分账比例
     *
     * @param accountId
     * @return
     */
    Result<Void> editSubAccountRatioState(Integer accountId, Integer type);

    /**
     * 查询用户余额统计
     *
     * @param accountId
     * @param phone
     * @return
     */
    SubAccountBalanceVO queryBalance(Integer accountId, String phone);

    /**
     * 分页查询用户余额信息
     *
     * @param page
     * @param size
     * @param accountId
     * @param phone
     * @return
     */
    PageResult<SubAccountUserBalanceVO> queryUserBalancePage(Integer page, Integer size, Integer accountId, String phone);


    /**
     * 分页查询用户提现列表
     *
     * @param page
     * @param size
     * @param accountId
     * @return
     */
    PageResult<SubAccountWithdrawalVO> querySubAccountWithdrawal(Integer page, Integer size, Integer accountId);

    /**
     * 分账账户提现
     *
     * @param subAccountId
     * @param money
     * @param loginInfo
     * @return
     */
    Result withdrawalBalance(Integer subAccountId, Integer money, LoginInfo loginInfo, String remark);

    /**
     * 余额退款
     *
     * @param userId
     * @param accountId
     * @param refundMoney
     * @return
     */
    Result balanceRefund(Integer userId, Integer accountId, Double refundMoney);

    /**
     * 分组查询分账比例
     *
     * @param page      当前页码
     * @param size      每页显示的行
     * @param accountId 区域id
     * @param state     状态(0:未生效，1:生效中，2:已过期)
     * @return
     */
    PageResult<SubAccountRatioGroupVO> querySubAccountGroupRatio(Integer page, Integer size, Integer accountId, Integer state, Integer type);


    /**
     * 手动刷新用户余额
     *
     * @return
     */
    Result refreshBalance();

    /**
     * 修改商户账户信息
     *
     * @param subAccountMerchantsDTO
     * @return
     */
    Result updateMerchants(SubAccountMerchantsDTO subAccountMerchantsDTO);


   Result updateBankCard(Integer accountId, Integer subAccountId,String bankCardNumber,String openBank);

     Result selectBankCard(Integer accountId, Integer subAccountId);

    Result getAdaPay();
}
